package com.powerbank.common.client;

import com.powerbank.common.result.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.math.BigDecimal;
import java.util.Map;

/**
 * 支付中心客户端降级实现
 */
@Slf4j
@Component
public class PaymentCenterClientFallback implements PaymentCenterClient {

    @Override
    public Result<BigDecimal> getWalletBalance(Long userId) {
        log.warn("支付中心服务不可用，获取钱包余额降级处理: userId={}", userId);
        return Result.success(BigDecimal.ZERO); // 降级时返回0余额
    }

    @Override
    public Result<String> freezeAmount(Map<String, Object> freezeRequest) {
        log.warn("支付中心服务不可用，冻结金额降级处理: {}", freezeRequest);
        return Result.error("支付服务暂时不可用，冻结操作失败");
    }

    @Override
    public Result<Void> unfreezeAmount(Map<String, Object> unfreezeRequest) {
        log.warn("支付中心服务不可用，解冻金额降级处理: {}", unfreezeRequest);
        return Result.error("支付服务暂时不可用，解冻操作失败");
    }

    @Override
    public Result<Void> deductAmount(Map<String, Object> deductRequest) {
        log.warn("支付中心服务不可用，扣除金额降级处理: {}", deductRequest);
        return Result.error("支付服务暂时不可用，扣费操作失败");
    }

    @Override
    public Result<Void> refundAmount(Map<String, Object> refundRequest) {
        log.warn("支付中心服务不可用，退款降级处理: {}", refundRequest);
        return Result.error("支付服务暂时不可用，退款操作失败");
    }

    @Override
    public Result<Map<String, Object>> createPaymentOrder(Map<String, Object> paymentRequest) {
        log.warn("支付中心服务不可用，创建支付订单降级处理: {}", paymentRequest);
        return Result.error("支付服务暂时不可用，无法创建支付订单");
    }

    @Override
    public Result<Map<String, Object>> getPaymentStatus(String paymentNo) {
        log.warn("支付中心服务不可用，查询支付状态降级处理: paymentNo={}", paymentNo);
        return Result.error("支付服务暂时不可用，无法查询支付状态");
    }

    @Override
    public Result<Void> cancelPaymentOrder(String paymentNo) {
        log.warn("支付中心服务不可用，取消支付订单降级处理: paymentNo={}", paymentNo);
        return Result.error("支付服务暂时不可用，取消操作失败");
    }

    @Override
    public Result<Map<String, Object>> createRefundOrder(Map<String, Object> refundRequest) {
        log.warn("支付中心服务不可用，创建退款订单降级处理: {}", refundRequest);
        return Result.error("支付服务暂时不可用，无法创建退款订单");
    }

    @Override
    public Result<Map<String, Object>> getRefundStatus(String refundNo) {
        log.warn("支付中心服务不可用，查询退款状态降级处理: refundNo={}", refundNo);
        return Result.error("支付服务暂时不可用，无法查询退款状态");
    }

    @Override
    public Result<Map<String, Object>> getWalletInfo(Long userId) {
        log.warn("支付中心服务不可用，获取钱包信息降级处理: userId={}", userId);
        return Result.error("支付服务暂时不可用，请稍后重试");
    }

    @Override
    public Result<Void> rechargeWallet(Long userId, BigDecimal amount, String paymentMethod) {
        log.warn("支付中心服务不可用，钱包充值降级处理: userId={}, amount={}", userId, amount);
        return Result.error("支付服务暂时不可用，充值操作失败");
    }
}